home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / share / irssi / scripts / kills.pl < prev    next >
Text File  |  2006-05-02  |  3KB  |  103 lines

  1. # Display kills with more understandable messages.
  2. # for irssi 0.7.98 by Timo Sirainen
  3.  
  4. # There's one kind of nick collision this script doesn't handle - if the
  5. # collision is detected by the server you're connected to, it won't use
  6. # kill as quit reason, but "Nick collision(new)" or "..(old)". This is pretty
  7. # easy to understand already, happens hardly ever(?) and it can be faked
  8. # so I thought better not change it to kill message.
  9.  
  10. # There's a pretty good explanation of (ircnet) ircd's server kills in
  11. # http://www.irc.org/tech_docs/ircnet/kills.html
  12.  
  13. use Irssi;
  14. use vars qw($VERSION %IRSSI);
  15.  
  16. $VERSION = "1.00";
  17. %IRSSI = (
  18.     authors    => 'Timo Sirainen',
  19.     name    => 'kills',
  20.     description    => 'Displays kills with more understandable messages',
  21.     license    => 'Public Domain',
  22.     changed    => 'Sun Mar 10 23:18 EET 2002'
  23. );
  24.  
  25. Irssi::theme_register([
  26.   'kill_public', '{channick $0} {chanhost $1} killed by {nick $2}$3 {reason $4}'
  27. ]);
  28.  
  29. sub msg_quit {
  30.   my ($server, $nick, $addr, $data) = @_;
  31.  
  32.   my $localkill;
  33.   if ($data =~ /^Killed \(([^ ]*) \((.*)\)\)$/) {
  34.     # remote kill
  35.     $localkill = 0;
  36.   } elsif ($data =~ /^Local Kill by ([^ ]*) \((.*)\)/) {
  37.     # local kill
  38.     $localkill = 1;
  39.   } else {
  40.     return;
  41.   }
  42.  
  43.   my $killer = $1;
  44.   my $killmsg = $2;
  45.   my $msg = "\002Nick collision\002: ";
  46.  
  47.   my @printargs = ();
  48.   if ($killmsg =~ /([^ ]*) != (.*)/) {
  49.     # 1 != 2
  50.     my $server1 = $1, $server2 = $2;
  51.  
  52.     $server1 =~ s/([^\[]*)\[([^\]]*)\]/\1/;
  53.     $msg .= "$2 != $server2";
  54.   } elsif ($killmsg =~ /([^ ]*) <- (.*)/) {
  55.     # 1 <- 2
  56.     my $server1 = $1, $server2 = $2;
  57.  
  58.     if ($server1 =~ /^\(/) {
  59.       # (addr1)server1 <- (add2)server2
  60.       $server1 =~ s/^\(([^\)]*)\)//;
  61.       my $nick1 = $1;
  62.       $server2 =~ s/^\(([^\)]*)\)//;
  63.       my $nick2 = $1;
  64.  
  65.       $msg .= "server $server1";
  66.       $msg .= " (nick from $nick1)" if $nick1;
  67.       $msg .= " <- ";
  68.       $msg .= "\002$server2\002";
  69.       $msg .= " (nick from \002$nick2\002)" if $nick2;
  70.     } elsif ($server1 =~ /\)$/ || $server2 =~ /\)$/) {
  71.       # server1(nick) <- server2
  72.       # server1 <- server2(nick)
  73.       $server1 =~ s/\(([^\)]*)\)$//;
  74.       my $oldnick = $1;
  75.       $server2 =~ s/\(([^\)]*)\)$//;
  76.       $oldnick = $1 if $1;
  77.       $msg = "\002Nick change collision\002: $server1 <- \002$server2\002 (old nick \002$oldnick\002)";
  78.     } else {
  79.       # server1 <- server2
  80.       $msg = "\002Nick/server collision\002: $server1 <- \002$server2\002";
  81.     }
  82.   } else {
  83.     # something else, just show it as-is
  84.     $msg = $killmsg;
  85.   }
  86.  
  87.   @list = $server->nicks_get_same($nick);
  88.   while (@list) {
  89.     $channel = $list[0];
  90.     shift @list;
  91.     # skip nick record
  92.     shift @list;
  93.  
  94.     $channel->printformat(MSGLEVEL_QUITS, 'kill_public',
  95.                           $nick, $addr, $killer,
  96.               $localkill ? " (local)" : "", $msg);
  97.   }
  98.  
  99.   Irssi::signal_stop();
  100. }
  101.  
  102. Irssi::signal_add('message quit', 'msg_quit');
  103.